﻿using GalaSoft.MvvmLight.Ioc;
using GalaSoft.MvvmLight.Threading;
using MVVMLightLesson.Base;
using MVVMLightLesson.BLL;
using MVVMLightLesson.DataAccess;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace MVVMLightLesson.ViewModels
{
    public class ViewModelCenter
    {
        #region 使用框架自带的IOC容器
        //SimpleIoc _simpleIoc = SimpleIoc.Default;

        //public ViewModelCenter()
        //{
        //    //初始化
        //    DispatcherHelper.Initialize();

        //    _simpleIoc.Register<MainViewModel>();
        //    _simpleIoc.Register<IDataAccess, MySqlDA>();
        //    //_simpleIoc.Register<IDataAccess,SqlServerDA>(); //只能注册一个数据访问层，否则会报错

        //    //MainViewModel model = _simpleIoc.GetInstance<MainViewModel>();

        //    var model = MainVM;//1
        //    model.Value = "ABC";
        //    var MODEL = MainVM;//2        对1中的Value赋值了 "ABC"，2中的MODEL里面的value还是ABC 说明在IOC中是有保存的；model跟MODEL是同一个实例

        //}

        //public static MainViewModel MainVM
        //{
        //    get => SimpleIoc.Default.GetInstance<MainViewModel>();
        //}
        #endregion


        #region 使用自定义的IOC容器
        MyIOC _simpleIoc = MyIOC.Default;

        public ViewModelCenter()
        {
            //初始化
            DispatcherHelper.Initialize();

            //_simpleIoc.Register<IDataAccess, MySqlDA>();
            _simpleIoc.RegisterSingle<MainViewModel>();
            _simpleIoc.Register<IDataAccess,SqlServerDA>(); //只能注册一个数据访问层，否则会报错
            _simpleIoc.Register<ILoginBLL, LoginBLL>();
            //MainViewModel model = _simpleIoc.GetInstance<MainViewModel>();

            var model = MainVM;//1
            model.Value = "ABC";
            var MODEL = MainVM;//2        对1中的Value赋值了 "ABC"，2中的MODEL里面的value还是ABC 说明在IOC中是有保存的；model跟MODEL是同一个实例

        }

        public static MainViewModel MainVM
        {
            get => MyIOC.Default.Resolve<MainViewModel>();
        }
        #endregion
    }
}
